package proj;

/**
 * @Description: TODO
 * @author: muxiongxiong
 * @date: 2021年07月05日 9:23
 * 公众号：雄雄的小课堂
 * 博客：https://blog.csdn.net/qq_34137397
 * 个人站：http://www.穆雄雄.com
 * 个人站：http://www.muxiongxiong.cn
 * 继承宠物类
 */
public final class Dog extends Pet {

    /**
     * final的用法以及特点：
     * 1.final修饰类时，该类不能被继承
     * 2.final修饰属性时，该属性为常量
     * 2.1常量的名字均大写
     * 2.2常量在声明时必须给其赋值
     * 2.3常量一旦被声明，后期就不能更改它的值
     * 3.final修饰方法时，该方法不能被重写
     */

    final String SEX = "男";

    private String strain;

    public Dog() {
        /*创建子类的有参构造方法：
        1.进入子类的有参构造方法
        2.进入父类的有参构造方法
        3.进入子类的有参构造方法

        创建子类的无参构造方法：
        1.进入子类的无参构造方法
        2.进入父类的无参构造方法
        3.进入子类的无参构造方法

        创建之类的有参构造方法（在子类的有参构造方法中不去调用父类的有参方法或无参方法）：
        1.进入子类的有参构造方法
        2.进入父类的无参构造方法
        3.进入之类的有参构造方法

        当创建之类的有参构造方法或者无参构造方法时，
        1.如果该构造方法没有显示的调用父类的
        有参或者无参的构造方法，程序会先调用父类的无参构造方法。
        2.如果子类的构造方法调用了父类的有参构造方法，程序会先调用父类的有参构造方法。
        3.如果子类的构造方法调用了父类的无参构造方法，程序会先调用父类的无参构造方法。

        */

    }

    public Dog(String strain) {
        this.strain = strain;
    }

    public Dog(String name, int health, int love, String strain) {
        //super表示父类
        // super(name, health, love);
        //super();
        this.strain = strain;
    }

    //实现父类的抽象方法
    @Override
    public void print() {
        System.out.println("子类重写父类的方法");
    }

    /**
     * 宠物的告白
     */
    public void show() {
        super.show();
        System.out.println("品种是：" + this.strain);
    }

    public String getStrain() {
        return strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }
}
